# 修改元组元素
tuple1 = (12, 34, 56)
tuple2 = ('abc', 'mn')
# 修改元组元素操作是非法的
# tuple1[0] = 100
# tuple1[0] = 200
# 连接元组创建一个新的元组，两个数据必须都是元组
tuple3 = tuple1 + tuple2
print(tuple3)




#
# # 使用input方法舒服联系人姓名、电话、邮件、地址；
# # 定义元组tuple1存储上的信息；
# # 输出tuple1，查看联系人信息；
#
# name = input(”请输入添加的联系人姓名:")
# telephone = input("请输入13位电话号码:")
# email = input("请输入邮件:")
# address = input("请输入地址：“)
# tuple1 = ("姓名 ", name, "电话： “， telephone,"邮箱：”,email,"地址：“,address)
# print(tuple1)
#
n = input('请输入联系人姓名:')
t = input('请输入13位手机号：')
e = input('请输入邮箱地址：')
a = input('请输入联系地址:')
tuple1 = ("姓名：", n, "电话：", t, "邮箱: ", e, "地址: ", a)
print(tuple1)





# """列表list“”“
# 3 列表的创建
# # 1.使用[ ] 直接创建列表:
# # list1 = [1, "hello", 2, "C语音"]
# # print(list1)
# # print(type(list1))
# # # 创建一个空列表
# # list2 = []
# # print(list2)
# 创建空列表
l1 = []
print(11)
# 创建带有元素的列表
l2 = [1, 2, 4, "python", 2.2]
print(1.2)
print(type(l2))


ll = list()
print(11)




# # 访问列表中的元素
# # 使用索引访问元素事例:
# # 使用索引访问列表中的某个元素
# list1 = ['p', 'y', 't', 'h', 'o', 'n']
# # 使用正数索引
# print(list1[2])
# # 使用负数索引
# print(list1[-3])
# 使用索引访问列表中的元素
# l1 = ['p', 'y','t'. 'y', 'q', 'w']
# 访问的。使用正确索引
print(l1[4])
# 访问t、使用负向索引
print(11[4])
# 访问t， 使用负问索引
print(1[-5])



# 使用切片形式访问列表中的元素
le = ["p", "y", "t", "h", "o", "n"]
# 使用正数切片，截取索引为2， 3， 4的元素，默认步长为1
print(l2[2:5])
# 取索引3-5的元素，末尾
print(l2[3:])
# 取索引0-2的元素，开头
print(l2[:3])
# 取索引1-5，步长2
print(l2[1::2])
# 使用负切片，取后三个元素
print(l2[-3:])
# 使用付切片，取-5——-1，步长是2的元素
print(l2[-5:-1:2])





# 遍历列表
l3 = ["python", "java", "c", "c=++", "r", "go", "javascript"]
for i in l3:
    print(i)

    # 修改列表元素
    # 修改单个元素
    l4 = [10, 56, 34, 2, 56, 44, 7]
    # 将索引为2的元素值修改为100
    l4[2] = 100
    print(l4)
    # 修改多个元素
    l5 = [10, 56, 34, 2, 56, 44, 7]
    # 修改第1~4个元素的值
    l5[1: 4:1] = [45, -56, 98]
    print(l5)

    # 列表中添加元素
    # append()用于在列表的末尾追加元素
    l6 = ["a", "b", "c"]
    l6.append("f")
    print(l6)
    # 列表添加列表
    l6.append(["e", "f"])
    print(l6)




# #  2、 rxtent()在列表的末尾是一次添加多个元素
l13 = ['a', 'b', 'c']
l13.extend('d')
print(l13)
#  列表添加列表
l13.extend(['e', 'f', 'g', 'h'])
print(l13)
l13.extend('morld')
print(l13)


# #  3、insert( )在列表的特定位置添加想要添加的特定元素
l14 = ['Python', 'C', 'java']
#  插入元素，在索引为2处插入go元素
l14.insert(2, 'go')
print(l14)



l15 = ['a', 'b', 'c', 'd']
l15.remove('a')
print(l15)


# # pop( ) 方法用来删除列表中制定索引处的元素
# l16 = [10, 56, 34, 2, 56, 44, 7]
# # 删除索引为3的元素
# l16.pop(3)
# orint(l16)
# # 删除最后一个元素
# l16.opo()
# print(l16)
l16 = [1, 3, 4, 5, 6, 7, 8, 9]
l16.pop(4)
print(l16)
l16.pop()
print(l16)



# # del 可以用来删除列表中单个元素或者一段连续的元素。
# l17 = ['a', 'b', 'c', 'd', 'e']
# # 删除索引为1的元素
# del l17[1]
# print(l17)
# l18 = [10, 56, 34, 2, 58, 44, 7]
# # 删除索引为1-3的元素
# del l18[1:4]
# print(l18)
# 删除单个元素
l17 = [1, 4, 8, 5, 6, 3, 2]
del l17[5]
# 删除8 5 6这三个元素
del l17[2:5]
print(l17)
#
# # 若将列表中所有元素全部删除，可使用列表的clear() 方法
# l19 = ['a', 'b'' 'c', 'a']





# # 任务
# # 创建两个空列表name_list和phone_list，用于存储联系人姓名和电话；
# # 向列表中添加联系人信息；
# # 输入联系人编号信息；
# # 输入联系人编号删除信息；
# # # 使用clear()清空通讯录。name_list=[‘张三’， ‘李四’， ；’王五‘， ’maliu']，phone_list=[123, 236, 258, 598]
name_list = []
phone_list = []
while 1:
    print('菜单:1.添加联系人 2.修改联系人3.删除联系人')
    chioce = input('请输入选择:')
    # 1.添加联系人，包括姓名，手机号
    if chioce == "1":
        name_list.append(input('请输入联系人姓名:'))
        phone_list.append(input('请输入联系人手机号:'))
        print(name_list)
        print(phone_list)
    # 2.修改联系人信息
    elif choioce == "2":
        num = int(input("请输入联系人编号:"))
        if len(name_list) > 0 and num <= len(name_list):
            name_list[num - 1] = input("修改联系人姓名")
            phone_list[num - 1] = input("修改联系电话")
        else:
            print("联系人编号输入有误")
            # 3.删除联系人信息
        elif chioce == "3":
        num = int(input("请输入联系人编号:"))
        if len(name_list) >0 and num <= len(name_list):
            name_list.pop(num-1)
            phone_list.pop(num - 1)
        else:
            print("联系人编号输入有误")
        else:
        print("显示联系人信息")
        print(name_list)
        print(phone_list)



# # 字典元素的访问
# 1、字典名[key]
d5 = {'数学':95, '英语':92, '语文':84}
# 键存在，返回的是值value
print(d5['英语'])
# 键不存在，会引发一个keyerror错误
print(d5['Python'])
#
# 2、get( )方法来获取指定键对应值，语法模式:字典名.get(key[,default])
d6 = {'数学':95, '英语':92, '语文':84}
# 键存在
print(d6.get('语文'))
# 键存在，不写default，会返回None
print(d6.get('python'))
print(d6.get('python','该键不存在'))


# # 字典添加键值对
d7 = {'数学':95, "英语":82, '语文':84, 'Python':99}
d7['可视化'] = 99
print(d7)



# # 字典修改键值对
d8 = {'数学':95, '英语':92, '语文':84, 'Python':99}
d8['英语'] = 100
print(d8)
#
#
# # 字典删除键值对
d9 = {'数学':95, '英语':92, '语文':84, 'Python':99}
# 1、使用del关键字
del d9['语文']
print(d9)
# 2、使用pop( )方法
d9.pop('英语')
print(d9)




# # 字符串str
# 使用引号，包括单引号，双引号，三引号
s1 = 'hello world'
print(s1)
print(type(s1))


s2 = '你好，石家庄'
print(s2)
print(type(s2))



# 2、使用str() 函数进行创建
num1 = 10
print(type(num1))
s3 = str(num1)
print(s3)
print(type(s3))
num2 = 3.141592653
print(type(num2))
s4 = str(num2)




# 字符串的格式化
# 1、使用替代符%
# 浮点型转化
s5 = '浮点数精确为:%f'%1.2345
print(s5)
s6 = '浮点数精确为:%.2f'%1.2345
print(s6)
# 整型转化
s7 = '整数精确为:%d'%1.2345
print(s7)
# 字符串转化
s8='整数精确为:%s'%1.2345
print(s8)


#2、通过format()函数格式，格式如下
#"{}".format(str)
# 或
# "{} {}".format(str1, str2)
print('{} {}'.format('hello','world'))




# 字符串的合并
# 1、使用”+“对多个字符串进行连接。
s9 = "hello"
s10 = "world"
print(s9 + s10)
# 使用型号（*）表示重复
print(s9 * 3)


# 2、使用join函数配合列表实现付多个字符串的连接
s11 = ['hello', 'python', 'hello', 'world']
s12 = '123'
print(''.join(s11))
print(s12.join(s11))


# 字符串的截取
# 1、使用的索引截取单个字符
s13 = 'python'
print(s13[3])
print(s13[-3])


# 2、使用切片截取字符串，字符串名[start:end:step],前闭后开
s14 = 'python'
print(s14[0:5])  # 取下标为0~4的字符
print(s14[2:5])  # 取下标为2~4的字符
print(s14[3:1])  # 输出为空

# # 3、使用split()函数截取字符串 字符串名.split(分隔符)
s15 = '开始,1,    2,    3,    4,    5,6'
print(s15.split())  # 默认空白字符分隔
print(s15.split('2'))  # 以','分割